package com.gds.wiki.cloud.framework.web.utils;

public class BankCardUtils {

    public static String getBankCode(String bankName) {
        String bankCode = "";

        // 中国建设银行
        if (bankName.contains("建设")) {
            bankCode = "0105";
        }

        // 中国光大银行
        if (bankName.contains("光大")) {
            bankCode = "0303";
        }

        // 招商银行
        if (bankName.contains("招商")) {
            bankCode = "0308";
        }

        // 中国农业银行
        if (bankName.contains("农业")) {
            bankCode = "0103";
        }

        // 交通银行
        if (bankName.contains("交通")) {
            bankCode = "0301";
        }

        // 平安银行股份有限公司
        if (bankName.contains("平安")) {
            bankCode = "0307";
        }

        // 上海浦东发展银行
        if (bankName.contains("浦东")) {
            bankCode = "0310";
        }

        // 中国邮政储蓄银行有限公司
        if (bankName.contains("邮政")) {
            bankCode = "0403";
        }

        // 华夏银行
        if (bankName.contains("华夏")) {
            bankCode = "0304";
        }

        // 中国民生银行
        if (bankName.contains("民生")) {
            bankCode = "0305";
        }

        // 中国银行
        if (bankName.contains("中国银行")) {
            bankCode = "0104";
        }

        // 中国工商银行
        if (bankName.contains("工商")) {
            bankCode = "0102";
        }

        // 广东发展银行
        if (bankName.contains("广发")) {
            bankCode = "0306";
        }

        // 兴业银行
        if (bankName.contains("兴业")) {
            bankCode = "0309";
        }

        // 中信实业银行
        if (bankName.contains("中信")) {
            bankCode = "0302";
        }

        return bankCode;
    }

    /**
     * 判断是否是银行卡号
     *
     * @param cardId
     * @return
     */
    public static boolean checkBankCard(String cardId) {
        char bit = getBankCardCheckCode(cardId.substring(0, cardId.length() - 1));
        if (bit == 'N') {
            return false;
        }
        return cardId.charAt(cardId.length() - 1) == bit;

    }

    public static char getBankCardCheckCode(String nonCheckCodeCardId) {
        if (nonCheckCodeCardId == null || nonCheckCodeCardId.trim().length() == 0
                || !nonCheckCodeCardId.matches("\\d+")) {
            // 如果传的不是数据返回N
            return 'N';
        }
        char[] chs = nonCheckCodeCardId.trim().toCharArray();
        int luhmSum = 0;
        for (int i = chs.length - 1, j = 0; i >= 0; i--, j++) {
            int k = chs[i] - '0';
            if (j % 2 == 0) {
                k *= 2;
                k = k / 10 + k % 10;
            }
            luhmSum += k;
        }
        return (luhmSum % 10 == 0) ? '0' : (char) ((10 - luhmSum % 10) + '0');
    }
}
